Makaitoushi Saga


We want to find where the 16x16 tiles are located in the introduction.

; -------------------------------------------------------

Through a dump, RAM $8000 is the storage area.

Set 'hook_wr1 0 8000 801f' (4-bpp linear).

[c:45eb] W08 = 00 [R-8000]
[c:45eb] W08 = 00 [R-8004]
[c:45eb] W08 = 00 [R-8008]
[c:45eb] W08 = 00 [R-800C]
[c:45eb] W08 = 00 [R-8010]
[c:45eb] W08 = 00 [R-8014]
[c:45eb] W08 = 00 [R-8018]
[c:45eb] W08 = 00 [R-801C]

[c:45eb] W08 = 00 [R-8001]
[c:45eb] W08 = 00 [R-8005]
[c:45eb] W08 = 00 [R-8009]
[c:45eb] W08 = 00 [R-800D]
[c:45eb] W08 = 00 [R-8011]
[c:45eb] W08 = 10 [R-8015]
[c:45eb] W08 = 10 [R-8019]
[c:45eb] W08 = 10 [R-801D]

Looks like bitplane processing.

; -------------------------------------------------------

; 4 color planes

[3c45dd] c:45dd b9 04               mov cx,04h              ax=0000 bx=0802 cx=0018 dx=2000 || bp=d420 sp=fdc6 si=ce20 di=8000 || cs=c000 ds=2000 ss=0000 es=0000 || 2=27 3=3f || 4=34 5=35 6=36 7=37 8=38 9=39 a=3a b=3b c=3c d=3d e=3e f=3f

[3c45e0] c:45e0 56                  push si                 ax=0000 bx=0802 cx=0004 dx=2000 || bp=d420 sp=fdc6 si=ce20 di=8000 || cs=c000 ds=2000 ss=0000 es=0000 || 2=27 3=3f || 4=34 5=35 6=36 7=37 8=38 9=39 a=3a b=3b c=3c d=3d e=3e f=3f
[3c45e1] c:45e1 57                  push di                 ax=0000 bx=0802 cx=0004 dx=2000 || bp=d420 sp=fdc4 si=ce20 di=8000 || cs=c000 ds=2000 ss=0000 es=0000 || 2=27 3=3f || 4=34 5=35 6=36 7=37 8=38 9=39 a=3a b=3b c=3c d=3d e=3e f=3f
[3c45e2] c:45e2 51                  push cx                 ax=0000 bx=0802 cx=0004 dx=2000 || bp=d420 sp=fdc2 si=ce20 di=8000 || cs=c000 ds=2000 ss=0000 es=0000 || 2=27 3=3f || 4=34 5=35 6=36 7=37 8=38 9=39 a=3a b=3b c=3c d=3d e=3e f=3f

; 8 pixel rows

[3c45e3] c:45e3 b9 08               mov cx,08h              ax=0000 bx=0802 cx=0004 dx=2000 || bp=d420 sp=fdc0 si=ce20 di=8000 || cs=c000 ds=2000 ss=0000 es=0000 || 2=27 3=3f || 4=34 5=35 6=36 7=37 8=38 9=39 a=3a b=3b c=3c d=3d e=3e f=3f

; upper 16x16 tile

[3c45e6] c:45e6 8a 04               mov al,ds:[si]          ax=0000 bx=0802 cx=0008 dx=2000 || bp=d420 sp=fdc0 si=ce20 di=8000 || cs=c000 ds=2000 ss=0000 es=0000 || 2=27 3=3f || 4=34 5=35 6=36 7=37 8=38 9=39 a=3a b=3b c=3c d=3d e=3e f=3f
[3c45e8] c:45e8 36 88 05            mov ss:[di],al          ax=0000 bx=0802 cx=0008 dx=2000 || bp=d420 sp=fdc0 si=ce20 di=8000 || cs=c000 ds=2000 ss=0000 es=0000 || 2=27 3=3f || 4=34 5=35 6=36 7=37 8=38 9=39 a=3a b=3b c=3c d=3d e=3e f=3f

; lower 16x16 tile

[3c45eb] c:45eb 8a 44 40            mov al,ds:[si+40h]      ax=0000 bx=0802 cx=0008 dx=2000 || bp=d420 sp=fdc0 si=ce20 di=8000 || cs=c000 ds=2000 ss=0000 es=0000 || 2=27 3=3f || 4=34 5=35 6=36 7=37 8=38 9=39 a=3a b=3b c=3c d=3d e=3e f=3f
[3c45ee] c:45ee 36 88 45 40         mov ss:[di+40h],al      ax=0011 bx=0802 cx=0008 dx=2000 || bp=d420 sp=fdc0 si=ce20 di=8000 || cs=c000 ds=2000 ss=0000 es=0000 || 2=27 3=3f || 4=34 5=35 6=36 7=37 8=38 9=39 a=3a b=3b c=3c d=3d e=3e f=3f

; bump src,dst pointers

[3c45f2] c:45f2 83 c6 04            add si,04h              ax=0011 bx=0802 cx=0008 dx=2000 || bp=d420 sp=fdc0 si=ce20 di=8000 || cs=c000 ds=2000 ss=0000 es=0000 || 2=27 3=3f || 4=34 5=35 6=36 7=37 8=38 9=39 a=3a b=3b c=3c d=3d e=3e f=3f
[3c45f5] c:45f5 83 c7 04            add di,04h              ax=0011 bx=0802 cx=0008 dx=2000 || bp=d420 sp=fdc0 si=ce24 di=8000 || cs=c000 ds=2000 ss=0000 es=0000 || 2=27 3=3f || 4=34 5=35 6=36 7=37 8=38 9=39 a=3a b=3b c=3c d=3d e=3e f=3f
[3c45f8] c:45f8 49                  dec cx                  ax=0011 bx=0802 cx=0008 dx=2000 || bp=d420 sp=fdc0 si=ce24 di=8004 || cs=c000 ds=2000 ss=0000 es=0000 || 2=27 3=3f || 4=34 5=35 6=36 7=37 8=38 9=39 a=3a b=3b c=3c d=3d e=3e f=3f
[3c45f9] c:45f9 75 eb               jnz 45e6h               ax=0011 bx=0802 cx=0007 dx=2000 || bp=d420 sp=fdc0 si=ce24 di=8004 || cs=c000 ds=2000 ss=0000 es=0000 || 2=27 3=3f || 4=34 5=35 6=36 7=37 8=38 9=39 a=3a b=3b c=3c d=3d e=3e f=3f

; Blt two tiles

[3c45fb] c:45fb b9 02               mov cx,02h              ax=0000 bx=0802 cx=0000 dx=2000 || bp=d420 sp=fdc0 si=ce40 di=8020 || cs=c000 ds=2000 ss=0000 es=0000 || 2=27 3=3f || 4=34 5=35 6=36 7=37 8=38 9=39 a=3a b=3b c=3c d=3d e=3e f=3f
[3c45fe] c:45fe e8 b7 02            call 48b8h              ax=0000 bx=0802 cx=0002 dx=2000 || bp=d420 sp=fdc0 si=ce40 di=8020 || cs=c000 ds=2000 ss=0000 es=0000 || 2=27 3=3f || 4=34 5=35 6=36 7=37 8=38 9=39 a=3a b=3b c=3c d=3d e=3e f=3f

; DMA NT

[3c4601] c:4601 9a 8a 07 00 40      call 4000:078ah         ax=0000 bx=0802 cx=0000 dx=2000 || bp=d420 sp=fdc0 si=ce40 di=8020 || cs=c000 ds=2000 ss=0000 es=0000 || 2=27 3=3f || 4=34 5=35 6=36 7=37 8=38 9=39 a=3a b=3b c=3c d=3d e=3e f=3f

; move to next plane

[3c4606] c:4606 59                  pop cx                  ax=0280 bx=0802 cx=0000 dx=2000 || bp=d420 sp=fdc0 si=ce40 di=8020 || cs=c000 ds=2000 ss=0000 es=0000 || 2=27 3=3f || 4=34 5=35 6=36 7=37 8=38 9=39 a=3a b=3b c=3c d=3d e=3e f=3f
[3c4607] c:4607 5f                  pop di                  ax=0280 bx=0802 cx=0004 dx=2000 || bp=d420 sp=fdc2 si=ce40 di=8020 || cs=c000 ds=2000 ss=0000 es=0000 || 2=27 3=3f || 4=34 5=35 6=36 7=37 8=38 9=39 a=3a b=3b c=3c d=3d e=3e f=3f
[3c4608] c:4608 5e                  pop si                  ax=0280 bx=0802 cx=0004 dx=2000 || bp=d420 sp=fdc4 si=ce40 di=8000 || cs=c000 ds=2000 ss=0000 es=0000 || 2=27 3=3f || 4=34 5=35 6=36 7=37 8=38 9=39 a=3a b=3b c=3c d=3d e=3e f=3f
[3c4609] c:4609 47                  inc di                  ax=0280 bx=0802 cx=0004 dx=2000 || bp=d420 sp=fdc6 si=ce20 di=8000 || cs=c000 ds=2000 ss=0000 es=0000 || 2=27 3=3f || 4=34 5=35 6=36 7=37 8=38 9=39 a=3a b=3b c=3c d=3d e=3e f=3f
[3c460a] c:460a 46                  inc si                  ax=0280 bx=0802 cx=0004 dx=2000 || bp=d420 sp=fdc6 si=ce20 di=8001 || cs=c000 ds=2000 ss=0000 es=0000 || 2=27 3=3f || 4=34 5=35 6=36 7=37 8=38 9=39 a=3a b=3b c=3c d=3d e=3e f=3f
[3c460b] c:460b 49                  dec cx                  ax=0280 bx=0802 cx=0004 dx=2000 || bp=d420 sp=fdc6 si=ce21 di=8001 || cs=c000 ds=2000 ss=0000 es=0000 || 2=27 3=3f || 4=34 5=35 6=36 7=37 8=38 9=39 a=3a b=3b c=3c d=3d e=3e f=3f
[3c460c] c:460c 75 d2               jnz 45e0h               ax=0280 bx=0802 cx=0003 dx=2000 || bp=d420 sp=fdc6 si=ce21 di=8001 || cs=c000 ds=2000 ss=0000 es=0000 || 2=27 3=3f || 4=34 5=35 6=36 7=37 8=38 9=39 a=3a b=3b c=3c d=3d e=3e f=3f

; -------------------------------------------------------

Keep hook_wr1.
Set 'hook_pc1 1 3c45e6 3c45e8'.

[3c45e6] c:45e6 8a 04               mov al,ds:[si]          ax=0000 bx=0802 cx=0008 dx=2000 || bp=d420 sp=fdc0 si=ce20 di=8000 || cs=c000 ds=2000 ss=0000 es=0000 || 2=27 3=3f || 4=34 5=35 6=36 7=37 8=38 9=39 a=3a b=3b c=3c d=3d e=3e f=3f
[3c45e8] c:45e8 36 88 05            mov ss:[di],al          ax=0000 bx=0802 cx=0008 dx=2000 || bp=d420 sp=fdc0 si=ce20 di=8000 || cs=c000 ds=2000 ss=0000 es=0000 || 2=27 3=3f || 4=34 5=35 6=36 7=37 8=38 9=39 a=3a b=3b c=3c d=3d e=3e f=3f
[c:45eb] W08 = 00 [R-8000]

2000:ce20 --> 27:ce20. And we find the uncompressed tiles. Mixed with some data.